// pages/user/personInfo/personInfo.js
const app = getApp();
import WxValidate from "../../../utils/WxValidate";
import utils from "../../../utils/quit";
Page({
  /**
   * 页面的初始数据
   */
  //注销登录
  quit() {
    wx.removeStorageSync("userInfo");
    app.globalData.userInfo = null;
    wx.switchTab({ url: "../person/person" }).then((res) => {
      utils();
    });
  },
  //昵称、手机号,输入框防抖
  timeID: 0, //定时器ID
  handleInput(e) {
    const { name } = e.currentTarget.dataset; //获取绑定的data-name属性值
    const { value } = e.detail; //获取输入的值
    clearTimeout(this.timeID); //清楚timeID对应的定时器，取消相应函数的执行
    this.timeID = setTimeout(() => {
      if (name == "nickName") {
        this.setData({ "userInfo.nickName": value });
      } else {
        this.setData({ "userInfo.phone": value });
      }
    }, 1000);
  },
  //初始化验证规则
  initValidate() {
    // 验证字段的规则
    const rules = {
      nickName: { required: true, maxlength: 10 },
      phone: { required: true, tel: true },
    };
    // 验证字段的提示信息，若不传则调用默认的信息
    const messages = {
      nickName: { required: "请输入昵称", maxlength: "昵称不能超过10个字符" },
      phone: { required: "请输入手机号", tel: "请输入正确的手机号码" },
    };
    // 创建实例对象
    this.WxValidate = new WxValidate(rules, messages);
  },
  /* 地址跳转 */
  selectAddress() {
    wx.navigateTo({
      url: "../../address/address",
    });
  },
  data: {
    userInfo: null,
  },
  //保存表单
  submitForm() {
    //params保存需要验证的数据对象
    const params = this.data.userInfo;
    //表单验证
    if (!this.WxValidate.checkForm(params)) {
      const error = this.WxValidate.errorList[0];
      this.showValidateModal(error);
      return false;
    }
    //表单验证完毕，接下来向后端发送数据
    //加载中
    wx.showLoading();
    //向服务端发送请求
    wx.request({
      url: `${app.globalData.server}/wxUpdateUserInfo`,
      method: "POST",
      data: {
        openid: params.openid,
        avatarUrl: params.avatarUrl,
        nickName: params.nickName,
        phone: params.phone,
      },
      success: (res) => {
        wx.hideLoading();
        //console.log(res)
        if (res.data.status === "success") {
          //更新缓存
          wx.setStorageSync("userInfo", params);
          //更新全局变量
          // console.log(res.data.result);
          app.globalData.userInfo = params;
          //提示
          wx.showToast({ title: "修改成功", icon: "success" });
          //跳转至个人中心页面
          setTimeout(() => {
            wx.redirectTo({
              url: "../person/person",
            });
          }, 1000);
        } else {
          //提示
          wx.showToast({ title: "修改失败", icon: "error" });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.log(err);
        //提示
        wx.showToast({ title: "修改失败", icon: "error" });
      },
    });
  },
  updateAvatar() {
    //调用wx.chooseMedia API打开图片选择窗口
    wx.chooseMedia({
      count: 1,
      mediaType: ["image"],
      sourceType: ["album", "camera"],
      sizeType: ["original", "compressed"],
      success: (res) => {
        //chooseMedia成功回调
        wx.showLoading({ title: "上传中" });
        //使用wx.uploadFile将图片发至服务端上传
        wx.uploadFile({
          filePath: res.tempFiles[0].tempFilePath, //文件暂存路径
          name: "img", //文件对应的 key
          url: `${app.globalData.server}/uploadImg`, //服务端路由
          success: (result) => {
            //成功回调
            //result.data为字符串，使用JSON.parse转成对象
            // console.log(result);
            let filePath = JSON.parse(result.data).path;
            //文件路径为\反斜杠，需要转为斜杠/，使用正则表达式进行过滤转换
            filePath = filePath.replace(/\\/g, "/"); //console.log(filePath)
            let userInfo = this.data.userInfo; //将完整的文件路径（含有域名信息）赋值给userInfo
            userInfo.avatarUrl = `${app.globalData.server}/${filePath}`;
            this.setData({ userInfo: userInfo });
            wx.hideLoading({});
            wx.showToast({ title: "上传成功", icon: "success" });
          },
          fail: (e) => {
            //失败回调 console.log(e)
            wx.hideLoading({});
            wx.showToast({ title: "上传失败", icon: "error" });
          },
        });
      },
      fail: (error) => {
        //chooseMedia失败回调 console.log(error)
        wx.showToast({ title: "上传失败", icon: "error" });
      },
    });
  },
  //表单验证错误提示
  showValidateModal(error) {
    wx.showModal({ content: error.msg, showCancel: false });
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    //读取缓存中的userInfo
    const userInfo = wx.getStorageSync("userInfo");
    // 读取全局
    // const userInfo = app.globalData.userInfo;
    this.setData({ userInfo });
    //加载表单验证规则
    this.initValidate();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
});
